# 内置函数
#1. 查看所有的内置函数
import builtins
# print(dir(builtins))
# ['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BaseExceptionGroup', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning',
# 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis',
# 'EncodingWarning', 'EnvironmentError', 'Exception', 'ExceptionGroup', 'False', 'FileExistsError', 'FileNotFoundError', 'FloatingPointError', 'FutureWarning', 'GeneratorExit',
# 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'InterruptedError', 'IsADirectoryError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError',
# 'ModuleNotFoundError', 'NameError', 'None', 'NotADirectoryError', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'PermissionError',
# 'ProcessLookupError', 'PythonFinalizationError', 'RecursionError', 'ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopAsyncIteration', 'StopIteration',
# 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError',
# 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'WindowsError', 'ZeroDivisionError', '_IncompleteInputError', '__build_class__',
# '__debug__', '__doc__', '__import__', '__loader__', '__name__', '__package__', '__spec__', 'abs', 'aiter', 'all', 'anext', 'any', 'ascii', 'bin', 'bool', 'breakpoint', 'bytearray',
# 'bytes', 'callable', 'chr', 'classmethod', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'exec', 'exit', 'filter', 'float',
# 'format', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map',
# 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit', 'range', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', 'sorted',
# 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars', 'zip']

# 大写字母开头一般是内置常量 小写一般是内置函数

# 1.1 abs  -> 返回绝对值
print(abs(-100)) #100

# 1.2 sum -> 求和 参数是可迭代对象
print(sum([1,3,4,5,76])) # 89
# print(sum("aafawefred")) # 报错, sum只能用来进行数字求和
# print(sum("1111111")) # 报错, 数字字符串也不行


# 1.3 min max 求最小值 和 最大值
print(min(21,23,543,35446)) # 21
print(max([21,23,543,35446])) # 35446
print(min(-8,4,key=abs)) # 4


# 1.4 zip 将可迭代对象作为参数,将对象中的元素一一打包成一个个元组
li = [1,2,3]
li2 = ['a','b','c']
print(zip(li,li2)) # <zip object at 0x000001E6287B0D80>

### 通过for取值
for item in zip(li,li2):
    print(item,type(item))
    # (1, 'a') <class 'tuple'>
    # (2, 'b') <class 'tuple'>
    # (3, 'c') <class 'tuple'>

li = [1,2,3]
li2 = ['a','b','c','d']
for item in zip(li, li2):
    print(item, type(item))
# (1, 'a') <class 'tuple'>
# (2, 'b') <class 'tuple'>
# (3, 'c') <class 'tuple'>
# 按照长度最小的返回


### 转成列表返回'
li = [1,2,3]
li2 = ['a','b','c','d']
print(list(zip(li,li2))) #[(1, 'a'), (2, 'b'), (3, 'c')]


# 1.5 map -> 可以对可迭代对象中的对象中的每一个元素进行映射,分别去执行
# map(func,iter)

li = [1,2,3,4,5]
print(map(lambda x : x**2,li)) # <map object at 0x000002865BF3DF00>
for item in map(lambda x : x**2,li):
    print(item,end='\t') # 1	4	9	16	25

print(list( map(lambda x : x**2,li))) #[1, 4, 9, 16, 25]

print()


# 1.6reduce 先将对象中的两个元素去取出,计算一个值然后保存着,接下来把这个计算值跟第三个元素进行计算 -> 需要先导包
from functools import reduce
# reduce(function,sequence) : function -> 必须有两个参数的函数 sequence -> 可迭代对象
li = [1,3,4,5,45,876]
res = reduce(lambda x,y : x+y,li)
print(res) # 934